/*
+ var定义的变量没有块的概念,可以跨块访问,不能跨函数访问,有变量提升,可重复声明
+ let定义的变量，只能在块作用域里访问，不能跨块访问，也不能跨函数访问，无变量提升，不可以重复声明
*/



/** 暂时性死区*/
// let 声明的变量只在块级作用域内有效,不存在变量提升，而是绑定在暂时性死区
// 或者说let变量提升了，但是在let声明变量前不能使用该变量，这特性叫暂时性死区(temporal dead zone)

// 不存在变量提升
function func(){
  // console.log(i); // ReferenceError: i is not defined
  let i;
}
func(); // 报错


/** 如果有重复变量let会在编译阶段报错*/
function abc(){
  console.log(1)
  let a = 'a1';
  let a = 'a2';
}

abc(); //SyntaxError: Identifier 'a' has already been declared
